home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / embedded / m68k / 68343ffp.arc / IEFADD.SA < prev    next >
Text File  |  1989-08-30  |  7KB  |  135 lines

  1.        TTL     IEEE FORMAT EQUIVALENT ADD/SUBTRACT (IEFADD/IEFSUB)
  2. ***************************************
  3. * (C) COPYRIGHT 1981 BY MOTOROLA INC. *
  4. ***************************************
  5.  
  6. *************************************************************
  7. *                     IEFADD/IEFSUB                         *
  8. *  FAST FLOATING POINT IEEE FORMAT EQUIVALENT ADD/SUBTRACT  *
  9. *                                                           *
  10. *  IEFADD - IEEE FORMAT EQUIVALENT FLOATING POINT ADDITION  *
  11. *                                                           *
  12. *  INPUT:  D6 - IEEE FORMAT NUMBER ADDEND (SOURCE)          *
  13. *          D7 - IEEE FORMAT NUMBER ADDER  (DESTINATION)     *
  14. *                                                           *
  15. *  IEFSUB - IEEE FORMAT EQUIVALENT FLOATING POINT SUBTRACT  *
  16. *                                                           *
  17. *  INPUT:  D6 - IEEE FORMAT NUMBER SUBTRAHEND (SOURCE)      *
  18. *          D7 - IEEE FORMAT NUMBER MINUEND (DESTINATION)    *
  19. *                                                           *
  20. *  OUTPUT: D7 - IEEE FORMAT FLOATING RESULT OF REGISTER D6  *
  21. *               ADDED OR SUBTRACTED FROM REGISTER D7        *
  22. *                                                           *
  23. *  CONDITION CODES:                                         *
  24. *          N - RESULT IS NEGATIVE                           *
  25. *          Z - RESULT IS ZERO                               *
  26. *          V - RESULT IS NAN (NOT-A-NUMBER)                 *
  27. *          C - UNDEFINED                                    *
  28. *          X - UNDEFINED                                    *
  29. *                                                           *
  30. *           ALL REGISTERS TRANSPARENT                       *
  31. *                                                           *
  32. *        MAXIMUM USED STACK:    28 BYTES                    *
  33. *                                                           *
  34. *  RESULT MATRIX:            ARG 2                          *
  35. *                  OTHERS    +INF      -INF        NAN      *
  36. *     ARG 1      ****************************************   *
  37. *   OTHERS       *   A    *    B    *    C     *    F   *   *
  38. *   +INFINITY    *   B    *    B    *    D     *    F   *   *
  39. *   -INFINITY    *   C    *    D    *    C     *    F   *   *
  40. *   NAN          *   E    *    E    *    E     *    F   *   *
  41. *                ****************************************   *
  42. *       A = RETURN ADDITION OR SUBTRACTION RESULT,          *
  43. *           OVERFLOWING TO INFINITY, UNDERFLOWING TO ZERO   *
  44. *       B = RETURN PLUS INFINITY                            *
  45. *       C = RETURN MINUS INFINITY                           *
  46. *       D = RETURN NEWLY CREATED NAN (NOT-A-NUMBER)         *
  47. *       E = RETURN ARG1 (NAN) UNCHANGED                     *
  48. *       F = RETURN ARG2 (NAN) UNCHANGED                     *
  49. *                                                           *
  50. *  NOTES:                                                   *
  51. *    1) FOR SUBTRACTION, THE SIGN OF THE SOURCE IS          *
  52. *       INVERTED AND THEN THE OPERATION IS TREATED AS       *
  53. *       AN ADDITION USING THE DECISION MATRIX ABOVE.        *
  54. *    2) SEE THE MC68344 USER'S GUIDE FOR A DESCRIPTION OF   *
  55. *       THE POSSIBLE DIFFERENCES BETWEEN THE RESULTS        *
  56. *       RETURNED HERE VERSUS THOSE REQUIRED BY THE          *
  57. *       IEEE STANDARD.                                      *
  58. *                                                           *
  59. *************************************************************
  60.          PAGE
  61. IEFADD IDNT    1,1  IEEE FORMAT EQUIVALENT ADD/SUBTRACT
  62.  
  63.          OPT       PCS
  64.  
  65.          XDEF      IEFADD    IEEE FORMAT ADDITION
  66.          XDEF      IEFSUB    IEEE FORMAT SUBTRACTION
  67.  
  68.          XREF      9:IEFDOP  DOUBLE ARGUMENT CONVERSION ROUTINE
  69.          XREF      9:IEFRTNAN CREATE AND RETURN NAN RESULT ROUTINE
  70.          XREF      9:IEFRTD7  RETURN CONTENTS OF D7 AS THE RESULT
  71.          XREF      9:IEFRTSZ  RETURN SIGNED ZERO WITH SIGN OF D7
  72.          XREF      9:IEFTIEEE RETURN AND CONVERT BACK TO IEEE FORMAT
  73.          XREF      9:FFPADD    REFERENCE FAST FLOATING POINT ADD ROUTINE
  74.        XREF    FFPCPYRT        COPYRIGHT NOTICE
  75.  
  76.          SECTION  9
  77.  
  78. ************************
  79. * SUBTRACT ENTRY POINT *
  80. ************************
  81. IEFSUB   BCHG.L    #31,D6    INVERT SIGN OF SECOND ARGUMENT FOR SUBTRACT
  82.          BSR.S     IEFADD    AND CALL ADD ROUTINE
  83.  
  84. ***  BEGIN 68010 COMPATIBILIITY CHANGES  ***
  85.  
  86.          SUBA.W   #2,A7      CLEAR SPOT FOR CCR
  87.          MOVEM.L  D0,-(SP)   PUSH D0 ON STACK
  88.          SF       D0         CLR.B D0 W/O CHANGING CCR
  89.          BNE.S    CCZ        CHECK Z BIT,BRANCH IF CLR
  90.          BSET     #6,D0      SET BIT 6 TO 1 FOR Z BIT
  91. CCZ      BCC.S    CCC        CHECK C BIT,BRANCH IF CLR
  92.          BSET     #4,D0      SET BIT 4 TO 1 FOR C BIT
  93. CCC      BVC.S    CCV        CHECK V BIT,BRANCH IF CLR
  94.          BSET     #5,D0      SET BIT 5 TO 1 FOR V BIT
  95. CCV      BPL.S    CCN        CHECK N BIT,BRANCH IF CLR
  96.          BSET     #7,D0      SET BIT 7 TO 1 FOR N BIT
  97. CCN      ROXR.B   #4,D0      ROTATE X BIT IN
  98.          AND.W    #$1F,D0    CLEAR UPPER BYTE
  99.          MOVE.W   D0,4(SP)   SAVE CCR OF RESULT ON THE STACK
  100.          MOVE.L   (SP)+,D0   RESTORE OLD D0 VALUE
  101.  
  102. ***  END 68010 COMPATIBILITY CHANGES  ***
  103.  
  104.          BCHG.L    #31,D6    REVERT SIGN BACK TO ORIGINAL CONDITION
  105.          RTR                 RETURN WITH RESULT AND CONDITION CODES
  106.  
  107. *******************
  108. * ADD ENTRY POINT *
  109. *******************
  110. IEFADD   BSR       IEFDOP    DECODE BOTH OPERANDS
  111.          BRA.S     IEFNRM    +0 BRANCH NORMALIZED
  112.          BRA.S     IEFINF2   +2 BRANCH ARG2 INFINITY
  113.          BRA.S     IEFINF1   +4 BRANCH ARG1 INFINITY
  114. * TEST FOR OPPOSITE SIGNS               +6 BOTH ARE INFINITY
  115.          EOR.L     D6,D7     EXCLUSIVE OR SIGNS
  116.          BMI       IEFRTNAN  OPPOSITE SIGNS - GO RETURN A NAN
  117. *                                      OTHERWISE BOTH SAME AND RETURN SAME
  118.  
  119. * ARG1 INFINITY - RETURN IT
  120. IEFINF1  MOVE.L    D6,D7     RETURN ARG1
  121. * ARG2 INFINITY - RETURN IT (ALREADY IN D7)
  122. IEFINF2  BRA       IEFRTD7   RETURN D7 AS OUR RESULT
  123.  
  124. * NORMALIZED NUMBERS - DO THE ADDITION
  125. IEFNRM   BSR       FFPADD    DO FAST FLOATING POINT ADD
  126.          BNE       IEFTIEEE  CONVERT RESULT BACK TO IEEE FORMAT
  127.  
  128. * RESULT IS ZERO - RETURN WITH PROPER SIGN FOR RN (ROUND-TO-NEAREST)
  129.          MOVEM.L   (SP),D3-D7  RELOAD ARGUMENTS (AND REST OF REGISTERS)
  130.          AND.L     D6,D7     RETURN MINUS ONLY IF BOTH MINUS
  131.          BRA       IEFRTSZ   RETURN SIGNED ZERO WITH SIGN OF D7
  132.  
  133.          END
  134.  
  135.